class Animal {
  constructor(name) {
    this.name = name,
      this.colors = ['1', '2']
  }
  getName () {
    return this.name
  }
  getColors = () => {
    return this.colors
  }
}
class Dog extends Animal {
  constructor(name, age) {
    super(name)
    this.age = age
  }
}
let animal = new Animal('动物')
let dog = new Dog('小黄', 3)
console.log(animal.prototype); // 是undefined
console.log(dog.prototype); // 是undefined
console.log(Animal.prototype === animal.__proto__); // true
console.log(Dog.__proto__ === Animal); // true
console.log(Dog.prototype.__proto__ === Animal.prototype); // true


// 后面的是函数的原型链
console.log(Animal.__proto__ === Function.prototype); // true 说明类其实是函数的实例
console.log(Function.prototype.__proto__ === Object.prototype); // true 说明函数的原型其实是对象的实例
console.log(Function.__proto__ === Object.prototype); // false 函数的构造函数不是object的实例
console.log(Object.__proto__ === Function.prototype); // true Object也是一个函数,所以他的__proto是函数的原型
console.log(Function.__proto__ === Function.prototype); // true 自己也是自己的实例
